package tp1.cinejdbc;

import java.text.DecimalFormat;
import java.text.Format;
import java.util.*;
import java.sql.*;

import sun.misc.FormattedFloatingDecimal;

public class Menu {

	
	private Connection conn;
	// Point d'entrée de l'application
	public static void main(String Args[]) {
		new Menu();
	}

	public Menu() {
		int choix;
		GregorianCalendar datejour = new GregorianCalendar();
		// // Connexion à votre base cinema
		String url="jdbc:postgresql://postgres-info/base5a06";
		try {
			conn = DriverManager.getConnection(url,"user5a06","p06");

		do {
			System.out.println();
			System.out.println("      **************************************");
			System.out.print("             On est le " + IO.ecrireDate(datejour));
			System.out.println();
			System.out.println("      **************************************");
			System.out.println("      *          CINEMA IUT                *");
			System.out.println("      **************************************");
			System.out.println("      * 1- Operations sur les CINEMAS      *");
			System.out.println("      * 2- Operations sur les FILMS        *");
			System.out.println("      * 3- Operations sur les ACTEURS      *");
			System.out.println("      *                                    *");
			System.out.println("      * 0- Quitter                         *");
			System.out.println("      **************************************");
			System.out.println();
			System.out.print("      Votre Choix : ");
			choix = IO.lireEntier();

			switch (choix) {
			case 1: {
				this.menuCinema();
				break;
			}
			case 2: {
				this.menuFilm();
				break;
			}
			case 3: {
				this.menuActeur();
				break;
			}
			case 4: {
				this.menuSeance();
				break;
			}
			default:
				break;
			}

			System.out.println();
		} while (choix != 0);

		 conn.close();
		} catch (SQLException E) {
			System.err.println("SQLException: " + E.getMessage());
			 System.err.println("SQLState:     " + E.getSQLState());
		}// catch
	}

	private void menuSeance() {
		
		
	}

	private void menuActeur() {
		int choix;
	// Chargement du driver
	// ---------------------------------------------------------
	try {
		Class.forName("org.postgresql.Driver");
	}// try
	catch (Exception E) {
		System.err.println("Impossible de Charger le driver.");
		return;
	}// catch
	try {
		do {
			System.out.println();
			System.out.println("      ******************************************");
			System.out.println("      *        Opérations sur les ACTEURS      *");
			System.out.println("      ******************************************");
			System.out.println("      * 1- Consulter tous les acteurs          *");
			System.out.println("      * 2- Consulter les films d'un acteur     *");
			System.out.println("      * 3- Inserer un acteur                   *");
			System.out.println("      * 4- Inserer un acteur pour un film      *");
			System.out.println("      *                                        *");
			System.out.println("      * 0- Retour au menu principal            *");
			System.out.println("      ******************************************");
			System.out.println();
			System.out.print("      Votre Choix : ");
			choix = IO.lireEntier();
			
			switch (choix) {
			case 1: {
			
				// // Préparation d'une requête
				 Statement stmt = conn.createStatement();
				// // Requête sur la relation ACTEUR
				 ResultSet rset = stmt.executeQuery("Select * from acteur");
				 while (rset.next()) {
				 String nom= rset.getString("nom") ;
				 String prenom = rset.getString("prenom");				 
				 System.out.println(nom + " " + prenom);
				 }
				 rset.close();
				 stmt.close();

				break;
			}
			case 2: {
				System.out.println("Entrez l'acteur : ");
				System.out.println("Nom : "); String nom=IO.lireChaine();
				System.out.println("Prénom : "); String prenom=IO.lireChaine();
				Statement stmt = conn.createStatement();
				ResultSet rset = stmt.executeQuery("select titre from jouedans where nom='"+nom+"' and prenom='"+prenom+"'");
				while (rset.next()) {
					 String titre = rset.getString("titre");
					 System.out.println(titre+" ");
					 }
				rset.close();
				stmt.close();
				break;
			}
			case 3 :{
				System.out.println("Entrez les infos de l'acteur : ");
				System.out.println("Nom : "); String nom=IO.lireChaine();
				System.out.println("Prénom : "); String prenom=IO.lireChaine();
				Statement st = conn.createStatement();
				st.executeUpdate("insert into acteur values ('"+prenom+"','"+nom+"')");
				break;
			}
			case 4 :{
				System.out.println("Entrez l'acteur à ajouter : ");
				System.out.println("Nom : "); String nom=IO.lireChaine();
				System.out.println("Prénom : "); String prenom=IO.lireChaine();
				System.out.println("Entrez le fim dans lequel l'acteur joue : ");
				System.out.println("Film : "); String titre=IO.lireChaine();
				
				Statement st = conn.createStatement();
				st.executeUpdate("insert into jouedans values ('"+prenom+"','"+nom+"','"+titre+"')");
				
				break;
			}
			default:
				break;
			} // switch
			System.out.println();
		} while (choix != 0);


	} catch (SQLException E) {
		System.err.println("SQLException: " + E.getMessage());
		 System.err.println("SQLState:     " + E.getSQLState());
	}// catch
	}

	public void menuCinema() {
		int choix;
		// Chargement du driver
		// ---------------------------------------------------------
		try {
			Class.forName("org.postgresql.Driver");
		}// try
		catch (Exception E) {
			System.err.println("Impossible de Charger le driver.");
			return;
		}// catch
		try {
			do {
				System.out.println();
				System.out.println("      ******************************************");
				System.out.println("      *        Opérations sur les CINEMAS     *");
				System.out.println("      ******************************************");
				System.out.println("      * 1- Consulter tous les cinémas          *");
				System.out.println("      * 2- Consulter un cinéma                 *");
				System.out.println("      * 3- Inserer un cinema                   *");
				System.out.println("      *                                        *");
				System.out.println("      * 0- Retour au menu principal            *");
				System.out.println("      ******************************************");
				System.out.println();
				System.out.print("      Votre Choix : ");
				choix = IO.lireEntier();
				
				switch (choix) {
				case 1: {
				
					// // Préparation d'une requête
					 Statement stmt = conn.createStatement();
					// // Requête sur la relation CINE
					 ResultSet rset = stmt.executeQuery("Select * from cine");
					 while (rset.next()) {
					 String nom = rset.getString("nomcine") ;
					 String adresse = rset.getString("adresse");
					 System.out.println(nom + " " + adresse);
					 }
					 rset.close();
					 stmt.close();

					break;
				}
				case 2: {
					System.out.println("Entrez un nom de cinéma : ");
					String cine= IO.lireChaine();
					Statement stmt = conn.createStatement();
					ResultSet rset = stmt.executeQuery("Select count(*) as nbsalles,adresse,AVG(capacite) as capacitemoyenne from cine,salle where cine.nomcine=salle.nomcine and cine.nomcine ='"+cine+"' group by adresse" );
					while (rset.next()) {
						 String nbsalle = rset.getString("nbsalles") ;
						 String adresse = rset.getString("adresse");
						 Float capacitemoyenne = rset.getFloat("capacitemoyenne");
						 DecimalFormat df = new DecimalFormat ( ) ; 
						 df.setMaximumFractionDigits (0) ;
						 System.out.println("Nombre de salles : "+ nbsalle + "\n" + "Adresse : " + adresse +  "\n" + "Capacité moyenne des salles : " + df.format(capacitemoyenne));
						 }
					rset.close();
					stmt.close();
					break;
				}
				case 3 :{
					System.out.println("Entrez les infos du cinema : ");
					System.out.println("Nom : "); String nomcine=IO.lireChaine();
					System.out.println("Adresse : "); String adresse=IO.lireChaine();
					Statement st = conn.createStatement();
					st.executeUpdate("insert into cine values ('"+nomcine+"','"+adresse+"')");
					break;
				}
				default:
					break;
				} // switch
				System.out.println();
			} while (choix != 0);


		} catch (SQLException E) {
			System.err.println("SQLException: " + E.getMessage());
			 System.err.println("SQLState:     " + E.getSQLState());
		}// catch
	}

	public void menuFilm() {
		int choix;
	// Chargement du driver
	// ---------------------------------------------------------
	try {
		Class.forName("org.postgresql.Driver");
	}// try
	catch (Exception E) {
		System.err.println("Impossible de Charger le driver.");
		return;
	}// catch
	try {
		do {
			System.out.println();
			System.out.println("      ******************************************");
			System.out.println("      *        Opérations sur les FILMS        *");
			System.out.println("      ******************************************");
			System.out.println("      * 1- Consulter tous les films            *");
			System.out.println("      * 2- Consulter les acteurs d'un film     *");
			System.out.println("      * 3- Inserer un film                     *");
			System.out.println("      *                                        *");
			System.out.println("      * 0- Retour au menu principal            *");
			System.out.println("      ******************************************");
			System.out.println();
			System.out.print("      Votre Choix : ");
			choix = IO.lireEntier();
			
			switch (choix) {
			case 1: {
			
				// // Préparation d'une requête
				 Statement stmt = conn.createStatement();
				// // Requête sur la relation CINE
				 ResultSet rset = stmt.executeQuery("Select * from film");
				 while (rset.next()) {
				 String titre = rset.getString("titre") ;
				 String realisateur = rset.getString("realisateur");				 
				 System.out.println(titre + "\t\t" + realisateur);
				 }
				 rset.close();
				 stmt.close();

				break;
			}
			case 2: {
				System.out.println("Entrez un nom d'un film : ");
				String titre= IO.lireChaine();
				Statement stmt = conn.createStatement();
				ResultSet rset = stmt.executeQuery("select nom,prenom from jouedans where titre='"+titre+"'");
				while (rset.next()) {
					 String nom = rset.getString("nom") ;
					 String prenom = rset.getString("prenom");
					 System.out.println(nom+" "+prenom);
					 }
				rset.close();
				stmt.close();
				break;
			}
			case 3 :{
				System.out.println("Entrez les infos du cinema : ");
				System.out.println("Titre : "); String titre=IO.lireChaine();
				System.out.println("Realisateur : "); String realisateur=IO.lireChaine();
				Statement st = conn.createStatement();
				st.executeUpdate("insert into film values ('"+titre+"','"+realisateur+"')");
				break;
			}
			default:
				break;
			} // switch
			System.out.println();
		} while (choix != 0);


	} catch (SQLException E) {
		System.err.println("SQLException: " + E.getMessage());
		 System.err.println("SQLState:     " + E.getSQLState());
	}// catch
	}

}
